package allaboutmybook;

import java.util.HashMap;
import java.util.LinkedList;

import dao.DAOComentarioTopicoForum;
import dao.DAOConcretoComentarioTopicoDeForum;
import dao.DaoConcretoForum;
import dao.DaoForum;
import excecoes.CampoImportanteEmBrancoException;
import excecoes.ChaveJaExisteException;
import excecoes.DAOException;

public class GerenteConcretoAtividadesForum implements GerenteAtividadesDoForum
{
	private DaoForum daoForum;
	private DAOComentarioTopicoForum daoComentariosForum;
	private static GerenteConcretoAtividadesForum singletonGerenteConcretoAtividadesDoForum;
	
	private GerenteConcretoAtividadesForum()
	{
		this.daoForum = new DaoConcretoForum();
		this.daoComentariosForum = new DAOConcretoComentarioTopicoDeForum();
		
	}
	
	public synchronized static GerenteAtividadesDoForum getInstance()
	{
		if(singletonGerenteConcretoAtividadesDoForum == null)
		{
			singletonGerenteConcretoAtividadesDoForum = new GerenteConcretoAtividadesForum();
		}
		
		return singletonGerenteConcretoAtividadesDoForum;
	}
	
	public HashMap<String, String> pegarNomesEDescricoesDeTopicoDeForum() throws DAOException
	{
		HashMap<String, String> nomesEDescricoesDeTopicosDeForum = new HashMap<String, String>();
		LinkedList<String> titulosTopicosDeForum = this.daoForum.pegarTitulosTopicosDeForum();
		for(int i = 0; i < titulosTopicosDeForum.size(); i++)
		{
			String tituloTopicoDeForum = titulosTopicosDeForum.get(i);
			//achamos o titulo de um topico de forum. Mas qual a descricao do topico que esta relacionada a ele?
			TopicoDeForum topicoDeTituloAssociado = 
					this.daoForum.pegarTopicoDeForum(tituloTopicoDeForum);
			String descricaoDoTopicoDeForum = topicoDeTituloAssociado.getDescricaoTopicoDeForum();
			//achamos o titulo e a descricao, vamos botar tudo no hashmap
			nomesEDescricoesDeTopicosDeForum.put(tituloTopicoDeForum, descricaoDoTopicoDeForum);
		}
		
		return nomesEDescricoesDeTopicosDeForum;
	}

	@Override
	public void criarNovoTopicoDeForum(String tituloTopico,
			String descricaoTopico) throws ChaveJaExisteException, DAOException, CampoImportanteEmBrancoException
	{
		if(tituloTopico == null || descricaoTopico == null || tituloTopico.length() <= 0 || descricaoTopico.length() <= 0)
		{
			throw new CampoImportanteEmBrancoException();
		}
		else
		{
			TopicoDeForum novoTopicoDeForum = new TopicoDeForum();
			novoTopicoDeForum.setDescricaoTopicoDeForum(descricaoTopico);
			novoTopicoDeForum.setTituloTopicodeForum(tituloTopico);
			this.daoForum.adicionarTopicoDeForum(novoTopicoDeForum);//ChaveJaExisteException pode ser lancada aqui
		}
		
		
	}

	@Override
	public TopicoDeForum pegarTopicoDeForumParaVisualizacao(
			String tituloTopicoDeForum) throws DAOException
	{
		return this.daoForum.pegarTopicoDeForum(tituloTopicoDeForum);
	}

	@Override
	public void adicionarComentarioAoTopicoDoForum(
			ComentarioDeForum comentario) throws DAOException, CampoImportanteEmBrancoException
	{
		if(comentario.getNomeComentarista() == null || comentario.getTextoComentario() == null || comentario.getNomeComentarista().length() <= 0 || comentario.getTextoComentario().length() <= 0)
		{
			throw new CampoImportanteEmBrancoException();
		}
		else
		{
			this.daoComentariosForum.adicionarComentarioAoTopicoDoForum(comentario);
		}
	}

	@Override
	public void removerTopicoDoForum(String tituloTopicoDoForum) throws DAOException
	{
		this.daoForum.removerTopicoDeForum(tituloTopicoDoForum);
		
	}

	

}
